As computer systems include increasingly sophisticated graphics subsystems and render and display images of ever greater complexity, the files representing those images are increasing in size and the processing required to render them is more demanding.
Current high-end systems may include several video or graphics processors and accelerators sufficient to process several streams of image or video data simultaneously, rendering the streams of data in parallel and outputting the results to appropriate display systems. A challenge presented by such systems is that a given graphics data stream may be extremely large, which can result in one of the hardware accelerators operating at capacity while other accelerators in the system are underutilized.
In systems with more than one hardware accelerator, there are several modes in which a video stream (or “vertex stream”, referring to the vertex data of the graphics primitives) may be sent, including as: a broadcast (the same vertex stream sent to multiple accelerators); a unicast-locked stream (a vertex stream sent to a single accelerator, set in software so that it can't be broken into multiple streams); and a unicast-unlocked stream (sent as a single vertex stream, but able to be broken into multiple streams).
It would be advantageous to provide a system wherein a graphics data stream could be distributed to multiple hardware accelerators to balance the processing load among the graphics processors, particularly for vertex streams that are sent as unicast-unlocked. However, there are a number of types of graphics primitives currently in common use in accordance with OpenGL and other approaches, including lines, triangles, polygons, triangle strips, and so on. It may be impractical to split streams of data representing some of these primitives in current systems, whereas for others an efficient approach to splitting may be arrived at. Accordingly, it would be useful to provide a system that can determine for a given graphics data stream whether splitting would be advantageous, as well as a system that actually executes the splitting and load balancing of such data streams.